perm filename HEADER.FAI[GEM,BGB]1 blob
sn#039870 filedate 1973-05-05 generic text, type T, neo UTF8
COMMENT ⊗ VALID 00005 PAGES
RECORD PAGE DESCRIPTION
00001 00001
00002 00002 ALTERNATE PDP-10 MNEMONICS.
00005 00003 MACROS TO MAKE FAIL EASIER
00010 00004 HERE LIE THE ROUTINES TO PUSH AND POP ACCUMULATORS (STOLEN FROM MONITER)
00012 00005 OPDEFS
00013 ENDMK
⊗;
;ALTERNATE PDP-10 MNEMONICS.
DEFINE O(A,B){OPDEF A[B]}
O LIP,HLR↔O LAP,HRR↔O DIP,HRLM↔O DAP,HRRM
O ZIP,HRRZS↔O ZAP,HLLZS↔O WIP,HRROS↔O WAP,HRRZS
O CAR,HLRZ↔O LIPI,HRLI↔O LAPI,HRRI↔O DIPZ,HRLZM
O CDR,HRRZ↔O LACI,MOVEI↔O SLACI,MOVSI↔O DAPZ,HRRZM
O LAC,MOVE↔O LACN,MOVN↔O LACM,MOVM↔O SLAC,MOVS
O DAC,MOVEM↔O DACN,MOVNM↔O DACM,MOVMM↔O SDAC,MOVSM
O NIP,HLRE↔O NAP,HRRE↔O NIM,HRREI↔O GO,JRST
O DZM,SETZM↔O DOM,SETOM
O FLOAT,FSC 233↔O FLO,FSC 225↔O FIXX,FIX 233000
;SAIL LIKE SUBROUTINE LINKAGE.
↓P←←17
DEFINE SETQ(VAR,LIST){CALL(LIST)↔DAC 1,VAR}
;RETURN FROM AN N-ARGUMENT SUBROUTINE CALL.
DEFINE POP0J <POPJ 17,>
↓POP1J.:SUB 17,[2(2)]↔GO@2(17)↔DEFINE POP1J<GO POP1J.>
↓POP2J.:SUB 17,[3(3)]↔GO@3(17)↔DEFINE POP2J<GO POP2J.>
↓POP3J.:SUB 17,[4(4)]↔GO@4(17)↔DEFINE POP3J<GO POP3J.>
↓POP4J.:SUB 17,[5(5)]↔GO@5(17)↔DEFINE POP4J<GO POP4J.>
;ACCUMULATOR AND TEMPORARY DATA MANAGEMENT.
DEFINE DECLARE (LIST){
FOR VARNAM⊂(LIST)<VARNAM: 0↔>}
DEFINE CRLF < OUTSTR[ASCIZ/
/]
>
;MACROS TO MAKE FAIL EASIER
IFNDEF TVR,<↓TVR←←0>
DEFINE CAT $(A,B){A$B}
FOR @$ I←0,16 ;TO MAKE DEBUGGING EASIER
< AC.$I←I
>
$←400000
.PLEVEL←←0
.SLEVEL←←0
;SUBROUTINE DECLARATIONS. MAKES MACROS FOR SYMBOLS REPRESENTING ARGUMENTS
DEFINE NSUBR(NAME,X1,X2,X3,X4,X5)
{ BEGIN NAME
INTERN NAME
GLOBAL .PLEVEL
GLOBAL .SLEVEL
.SLEVEL←←.SLEVEL+1
CAT(.SBR,→.SLEVEL)←←.PLEVEL
.PLEVEL←←.PLEVEL+1
IFDIF <><X1>{ DEFARG(X1,→.PLEVEL)
.PLEVEL←.PLEVEL+1
IFDIF <><X2>{ DEFARG(X2,→.PLEVEL)
.PLEVEL←.PLEVEL+1
IFDIF <><X3>{ DEFARG(X3,→.PLEVEL)
.PLEVEL←.PLEVEL+1
IFDIF <><X4>{ DEFARG(X4,→.PLEVEL)
.PLEVEL←.PLEVEL+1
IFDIF <><X5>{ DEFARG(X5,→.PLEVEL)
.PLEVEL←.PLEVEL+1
}}}}}
XWD 777000+.PLEVEL-CAT(.SBR,→.SLEVEL)-1,[SIXBIT|NAME|]
↓NAME: ;}
;DEFINE AN ARGUMENT
DEFINE DEFARG(NAME,LEVEL)
{ DEFINE NAME { LEVEL-.PLEVEL(17)}}
;END OF SUBROUTINE
DEFINE SUBREND
{ .PLEVEL←←CAT(.SBR,→.SLEVEL)
.SLEVEL←←.SLEVEL-1
LIT
BLOCK 0
BEND }
;GENERATE SUBROUTINE CALL (DOES THE RIGHT THING WITH SYMBOLIC ARGUEMENTS)
DEFINE CALL(NAME,X1,X2,X3,X4,X5)
{ GLOBAL .SLEVEL,.PLEVEL
.SLEVEL←←.SLEVEL+1
CAT(.SBR,→.SLEVEL)←←.PLEVEL
IFDIF <><X1>{PUSH 17,X1↔.PLEVEL←.PLEVEL+1
IFDIF <><X2>{PUSH 17,X2↔.PLEVEL←.PLEVEL+1
IFDIF <><X3>{PUSH 17,X3↔.PLEVEL←.PLEVEL+1
IFDIF <><X4>{PUSH 17,X4↔.PLEVEL←.PLEVEL+1
IFDIF <><X5>{PUSH 17,X5↔.PLEVEL←.PLEVEL+1
}}}}}
IFDIF <><NAME>{
PUSHJ P,NAME
}
.PLEVEL←←CAT(.SBR,→.SLEVEL)
.SLEVEL←←.SLEVEL-1
}
;PUSH SOMETHING ONTO STACK
DEFINE PUSHP(ARG)
< PUSH P,ARG
.PLEVEL←←.PLEVEL+1
>
DEFINE POPP(ARG)
< POP P,ARG
.PLEVEL←←.PLEVEL-1
>
DEFINE SETQ(VAR,LIST){CALL(LIST)↔DAC 1,VAR}
;ACCUMULATOR AND TEMPORARY DATA MANAGEMENT.
DEFINE ACCUMULATORS(LIST){ACPTR←←2
FOR AC⊂(LIST)<AC←ACPTR
ACPTR←←ACPTR+1↔>}
;FATAL ERROR MESSAGE.
DEFINE FATAL(STR){PUSHJ 17,FATAL.↔JFCL [ASCIZ/STR/]}
DEFINE WARNING(STR){PUSHJ 17,WARN.↔JFCL [ASCIZ/STR/]}
EXTERNAL FATAL.,WARN.
COMMENT | OLD FATAL.
FATAL.: OUTSTR[BYTE(7)15,12,106,101,124↔"AL - "⊗1↔0]
PUSH P,1↔MOVE 1,@-1(P)↔OUTSTR (1)↔OUTSTR[ASCIZ/
/]↔ POP P,1↔INCHRW↔JRST .-1
|;
;CHAIN TOGETHER INITIALIZING CODE
DEFINE INITCODE
<IFAVL .INITLINK
< GLOBAL .INITLINK
PUSHJ P,.+2
JRST .INITLINK
↑.INITLINK←←.-2
;> ↑.INITLINK←←.
>
;CHAIN TOGETHER BIT TABLES
DEFINE BITDEFS(BITS)
<IFNDEF .BTLNK < .BTLNK←←0
;> .BTLNK
.BTLNK←←.BTLNK*1000000+$.
.BTABL←←$.
FOR BIT⊂(BITS)
<IFIDN <><BIT>< 0
;> RADIX50 0,BIT
> BLOCK =36+.BTABL-$.
>
DEFINE TAIL
<DOINIT:
IFDEF .INITLINK < PUSHJ P,.INITLINK
> IFDEF .BTLNK < EXTERNAL $M
MOVE [.BTLNK]
SKIPE [$M]
MOVEM $M+3
POP0J
>>
;;HERE LIE THE ROUTINES TO PUSH AND POP ACCUMULATORS (STOLEN FROM MONITER)
IFNDEF PUSHIT<
DEFINE PUSHACS
< PUSHJ P,PUSHIT
GLOBAL .PLEVEL
.PLEVEL←←.PLEVEL+20
>
DEFINE POPACS
< PUSHJ P,POPIT
GLOBAL .PLEVEL
.PLEVEL←←.PLEVEL-20
>
EXTERNAL PUSHIT,POPIT
;OPDEFS
;MAKE RAID KNOW THE FOLLOWING
OPDEF FIX [FIX]
OPDEF INCHRW [INCHRW]
OPDEF INCHWL [INCHWL]
OPDEF OUTCHR [OUTCHR]
OPDEF OUTSTR [OUTSTR]
OPDEF HALT [HALT]
OPDEF JRSTF [JRST 2,]
OPDEF JCALL [JRST 1,] ;(JUMP AND ENTER USER MODE) SPECIAL FLAG FOR CALL BY JRST
OPDEF PGCLR [PGIOT 2,]
IODEND←←20000
EXTERNAL JOBFF,JOBREL,JOBSA,JOBREN,JOBSYM,JOBDDT,JOBOPC,JOBHRL